package com.angel.architecture.flex.annotations.reader;

import java.lang.annotation.Annotation;

/**
 * Esta clase evalua una annotation
 * En caso de que sea null (no exista) permite tomar una decision por default
 * En caso de que no sea null delega en el metodo subEvaluate
 *
 * @author Sebastian D. Rosenbolt
 *         Date: 26/09/2008
 */
public class AnnotationNoObligatoriaPredicate<T extends Annotation> implements AnnotationPredicate<T>{
    private boolean defaultValue;

    public AnnotationNoObligatoriaPredicate(boolean defaultValue) {
        this.defaultValue = defaultValue;
    }

    public final boolean evaluate(T annotation) {
        if(annotation==null){
            return defaultValue;
        }
        return subEvaluate(annotation);
    }

    /**
     * Este metodo contiene una evaluacion adicional
     * @param annotation este parametro no puede ser nulo
     * @return true si la evaluacion es correcta
     * false si es incorrecta. Por default devuelve true
     */
    protected boolean subEvaluate(T annotation) {
        return true;
    }

}